//package com.wzh.project.csb.util;
//
//import java.util.Map;
//
//import javax.xml.soap.SOAPMessage;
//import javax.xml.ws.Dispatch;
//
//import org.apache.logging.log4j.LogManager;
//import org.apache.logging.log4j.Logger;
//
//import com.alibaba.csb.sdk.HttpCaller;
//import com.alibaba.csb.sdk.HttpParameters;
//import com.alibaba.csb.ws.sdk.WSInvoker;
//import com.alibaba.csb.ws.sdk.WSParams;
//import com.css.sword.kernel.base.exception.SwordBaseCheckedException;
//
///**
// * 
// * 金税三期工程核心征管及应用总集成项目 ， 异步队列调用，可提供对账功能
// * <p>
// * com.css.sword.esb.serviceCenter.utils
// * <p>
// * File: CsbServiceUtil.java 创建时间:2020-1-14下午03:20:38
// * </p>
// * <p>
// * Title: CSB服务工具类
// * </p>
// * <p>
// * Description: 提供CSB各种协议调用
// * </p>
// * <p>
// * Copyright: Copyright (c) 2020 中国软件与技术服务股份有限公司
// * </p>
// * <p>
// * Company: 中国软件与技术服务股份有限公司
// * </p>
// * <p>
// * 模块: ESB
// * </p>
// * 
// * @author 李通
// * @version 1.0
// * @history 修订历史（历次修订内容、修订人、修订时间等）
// */
//public class CsbServiceUtil {
//	
//	private static final Logger logger = LogManager.getLogger(CsbServiceUtil.class);
//
//
//	/**
//	 * 通过各种协议进行调用（restful，dubbo，HSF）
//	 * 
//	 * @param requestUrl CSB服务地址即创建该实例时绑定的SLB的地址
//	 * @param vpcApiName 服务名称
//	 * @param version    服务版本号
//	 * @param method     请求方式 （get/post）
//	 * @param ak         订购凭证accessKey
//	 * @param sk         订购凭证secretKey
//	 * @param headerMap  请求头map
//	 * @param bizMap     请求参数map
//	 * @return 返回内容
//	 * @throws Exception
//	 */
//	public static Object invokeHttpService(String requestUrl, String vpcApiName, String version, String method,
//			String accessKey, String secretKey, Map<String, String> headerMap, Map<String, String> bizMap)
//			throws SwordBaseCheckedException {
//		long before = System.currentTimeMillis();
//		// 入参判断
//		checkParams(requestUrl, vpcApiName, version, method, accessKey, secretKey);
//
//		HttpParameters.Builder builder = new HttpParameters.Builder();
//		builder.requestURL(requestUrl) // 设置请求的URL。其中，CSB服务地址即创建该实例时绑定的SLB的地址。
//				.api(vpcApiName) // 设置服务名
//				.version(version) // 设置版本号
//				.method(method) // 设置调用方式, get/post
//				.accessKey(accessKey).secretKey(accessKey); // 设置accessKey和secretKey
//		// 设置请求头参数
//		if (headerMap != null && !headerMap.isEmpty()) {
//			builder.putHeaderParamsMapAll(headerMap);
//		}
//		// 设置HTTP FORM表单请求参数
//		if (bizMap != null && !bizMap.isEmpty()) {
//			builder.putParamsMapAll(bizMap);
//		}
//		try {
//			String resultMsg = HttpCaller.invoke(builder.build());
//			logger.debug("CSB调用返回结果为：" + resultMsg);
//			if (resultMsg.contains("signature verification failed,")) {
//				throw new SwordBaseCheckedException(
//						"凭证校验失败，请检查accessKey【" + accessKey + "】和secretKey【" + secretKey + "】是否正确！");
//			}
//			return resultMsg;
//		} catch (Exception e) {
//			throw new SwordBaseCheckedException("CSB调用失败,失败信息为：" + e.getMessage());
//
//		} finally {
//			long after = System.currentTimeMillis();
//			logger.debug("CSB调用耗时" + (after - before) + "毫秒");
//		}
//
//	}
//
//	/**
//	 * 通过webservice协议进行调用
//	 * 
//	 * @param nameSpace     在wsdl中定义的服务的target namespace
//	 * @param serviceName   在wsdl中定义的服务名
//	 * @param portName      在wsdl中定义的端口名
//	 * @param soapActionUri SOAPAction，e.g:http://xx.com/abc
//	 * @param endpoint      CSB调用地址
//	 * @param reqSoap       Soap请求内容
//	 * @param version       服务版本号
//	 * @param apiName       CSB服务名称
//	 * @param accessKey     订购凭证accessKey
//	 * @param secretKey     订购凭证secretKey
//	 * @param isSoap12      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
//	 *                    根据这个（xmlns:soap）确定是否是Soap12，后面soap有12就是Soap12，默认false
//	 * @return
//	 * @throws SwordBaseCheckedException
//	 */
//	public static Object invokeWebServiceService(
//			String nameSpace, String serviceName, String portName,
//			String soapActionUri, String endpoint, String reqSoap, 
//			String version, String apiName, String accessKey,
//			String secretKey,boolean isSoap12) throws SwordBaseCheckedException {
//		long before = System.currentTimeMillis();
//		checkParams(nameSpace, serviceName, portName, soapActionUri, 
//				endpoint, reqSoap, version, accessKey, secretKey);
////	        String nameSpace = "http://xxx.yyy.com/zzzService";
////	        String serviceName = "zzzService";
////	        String portName = "zzzServicePortType";
////	        String soapActionUri = "http://xxx.yyy.com/action1";	        
////	        String endpoint = "http://localhost:9081/csbTest/1.0.0/ws2ws";
////	        String reqSoap = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ws2=\"http://ws2ws.csbTest.csb/\">\n" +
////	                "   <soapenv:Header/>\n" +
////	                "   <soapenv:Body>\n" +
////	                "      <ws2:ws2ws>\n" +
////	                "         <pageSize>10</pageSize>\n" +
////	                "      </ws2:ws2ws>\n" +
////	                "   </soapenv:Body>\n" +
////	                "</soapenv:Envelope>";
//		try {
//			WSParams params = WSParams.create().api(apiName).version(version).accessKey(accessKey).secretKey(secretKey);
//			Dispatch<SOAPMessage> dispatch = WSInvoker.createDispatch(params, nameSpace, serviceName, portName,
//					soapActionUri, isSoap12, endpoint);
//			SOAPMessage request = WSInvoker.createSOAPMessage(isSoap12, reqSoap);
//			SOAPMessage response = dispatch.invoke(request);
//			logger.debug("CSB调用WebService 结果为：" + response.toString());		
//			return response;
//		}catch (Exception e) {
//			throw new SwordBaseCheckedException("CSB调用WebService失败,失败信息为：" + e.getMessage());
//		}finally {
//			long after = System.currentTimeMillis();
//			logger.debug("CSB调用WebService协议耗时" + (after - before) + "毫秒");
//		}
//	}
//
//	private static void checkParams(String nameSpace, String serviceName, String portName, String soapActionUri,
//			String endpoint, String reqSoap, String version, String accessKey, String secretKey)
//			throws SwordBaseCheckedException {
//		if (checkNull(nameSpace)) {
//			throw new SwordBaseCheckedException("命名空间不能为空");
//		}
//		if (checkNull(serviceName)) {
//			throw new SwordBaseCheckedException("服务名称不能为空");
//		}
//		if (checkNull(portName)) {
//			throw new SwordBaseCheckedException("端口名称不能为空");
//		}
//		if (checkNull(soapActionUri)) {
//			throw new SwordBaseCheckedException("响应URL不能为空");
//		}
//		if (checkNull(endpoint)) {
//			throw new SwordBaseCheckedException("CSB调用地址不能为空");
//		}
//		// 判断地址是否合法
//		if (!endpoint.startsWith("https://") || !endpoint.endsWith("http://")) {
//			throw new SwordBaseCheckedException("CSB服务地址不合法！");
//		}
//		if (checkNull(reqSoap)) {
//			throw new SwordBaseCheckedException("Soap请求体不能为空");
//		}
//		if (checkNull(accessKey)) {
//			throw new SwordBaseCheckedException("订购凭证accessKey不能为空");
//		}
//		if (checkNull(secretKey)) {
//			throw new SwordBaseCheckedException("订购凭证secretKey不能为空");
//		}
//
//	}
//
//	/**
//	 * 检查参数
//	 * 
//	 * @param requestUrl
//	 * @param vpcApiName
//	 * @param version
//	 * @param method
//	 * @param accessKey
//	 * @param secretKey
//	 * @throws Exception
//	 */
//	private static void checkParams(String requestUrl, String vpcApiName, String version, String method,
//			String accessKey, String secretKey) throws SwordBaseCheckedException {
//		// 判断地址是否为空
//		// Pattern pattern = Pattern.compile("/(http|https):\\/\\/([\\w.]+\\/?)\\C/");
//		if (checkNull(requestUrl)) {
//			throw new SwordBaseCheckedException("CSB服务地址不能为空");
//		}
//		// 判断地址是否合法
//		if (!requestUrl.startsWith("https://") || !requestUrl.endsWith("http://")) {
//			throw new SwordBaseCheckedException("CSB服务地址不合法！");
//		}
//		if (checkNull(vpcApiName)) {
//			throw new SwordBaseCheckedException("服务名称不能为空");
//		}
//		if (checkNull(version)) {
//			throw new SwordBaseCheckedException("服务版本不能为空");
//		}
//		if (checkNull(method)) {
//			throw new SwordBaseCheckedException("请求方式不能为空");
//		}
//		if (checkNull(method)) {
//			throw new SwordBaseCheckedException("订购凭证accessKey不能为空");
//		}
//		if (checkNull(method)) {
//			throw new SwordBaseCheckedException("订购凭证secretKey不能为空");
//		}
//
//	}
//
//	/**
//	 * 判空
//	 * 
//	 * @param param
//	 * @return
//	 */
//	private static boolean checkNull(String param) {
//		return param == null || "".equals(param);
//
//	}
//}
